package com.his.system.manager.base.dao;

import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;

/**
 * DAO公共基类，由MybatisGenerator自动生成请勿修改
 *
 * @param <T>  The Model Class 这里是泛型不是Model类
 * @param <PK> The Primary Key Class 如果是无主键，则可以用Model来跳过，如果是多主键则是Key类
 * @Description
 * @Author Admin
 * @Date 2020-06-03 11:07
 */
public interface BaseDao<T, PK extends Serializable> {
    /**
     * 根据实体获取列表
     *
     * @param entity
     * @return
     */
    List<T> selectByEntity(T entity);

    /**
     * 根据主键ID查询
     *
     * @param id 主键ID
     * @return T
     */
    T selectByPrimaryKey(PK id);

    /**
     * 根据编码查询
     *
     * @param code
     * @return
     */
    T selectOneByCode(@Param("code") String code);

    /**
     * 根据主键ID物理删除
     *
     * @param id 主键ID
     * @return Model entity实体
     */
    int deleteByPrimaryKey(PK id);

    /**
     * 单条新增所有字段
     *
     * @param t
     * @return
     */
    int insert(T t);


    /**
     * 单条新增非空字段
     *
     * @param t
     * @return
     */
    int insertSelective(T t);

    /**
     * 批量新增
     *
     * @param t
     * @return
     */
    int insertBatch(List<T> t);

    /**
     * 单条修改非空字段
     *
     * @param t
     * @return
     */
    int updateByPrimaryKeySelective(T t);

    /**
     * 单条修改所有字段
     *
     * @param t
     * @return
     */
    int updateByPrimaryKey(T t);
}